package com.tywj.panda.application

import com.meituan.android.walle.WalleChannelReader
import com.tencent.bugly.crashreport.CrashReport
import com.tywj.lib.core.common.application.LibApplication
import com.tywj.lib.core.common.util.LogUtil
import com.tywj.lib.route.RouteUtil
import com.tywj.lib.social.SocialUtil
import com.tywj.panda.customer.BuildConfig
import com.tywj.panda.customer.common.constant.ThirdPartyAccount
import com.tywj.panda.customer.common.provider.IH5Service
import com.tywj.panda.customer.common.tool.AppEnvTool
import com.tywj.panda.customer.common.tool.CacheTool
import com.tywj.panda.customer.common.tool.HttpTool
/**
 * <pre>
 *     author : June Yang
 *     time   : 2020/05/07
 *     desc   : Application
 *     version: 2.0.0
 * </pre>
 */
class PDApplication : LibApplication() {

    override fun isRelease(): Boolean {

        // 初始化缓存框架
        CacheTool.initCache()
        // 初始化App环境
        AppEnvTool.init(BuildConfig.APP_ENV)

        // 初始化路由框架
        RouteUtil.init(this, AppEnvTool.isDev)

        // 初始化H5环境
        RouteUtil.getServiceProvider(IH5Service::class.java)?.initEnvironment()

        // 设置第三方账号
        SocialUtil.weChatAppId = ThirdPartyAccount.WECHAT_APPID

        // 初始化日志框架
        LogUtil.init()
        if (AppEnvTool.isRelease) {
            LogUtil.stopLog()
        }

        // 初始化网络请求框架
        if (AppEnvTool.isRelease) {
            HttpTool.releaseConfig()
        } else {
            HttpTool.debugConfig(this)
        }

        if (!AppEnvTool.isDev) {
            // 非开发环境使用Bug上报框架和统计分析
            val channel = getChannel()

            // 初始化Bug上报框架
            initCrashReport(channel, !AppEnvTool.isRelease)

            // 初始化友盟统计分析
//            initUmengAnalytics(channel, !AppEnvTool.isRelease)
        }


        return AppEnvTool.isRelease
    }

    private fun getChannel(): String {
        val info = WalleChannelReader.getChannelInfo(this)
        return if (info == null) "panda_customer" else info.channel
    }

    /**
     * 初始化Bug上报框架
     */
    private fun initCrashReport(channel: String, isDebug: Boolean) {
        val strategy = CrashReport.UserStrategy(this)

        // 设置渠道
        strategy.appChannel = channel
        // 初始化Bug上报框架
        CrashReport.initCrashReport(this, ThirdPartyAccount.BUGLY_APPID, isDebug, strategy)
    }
}